package com.zhentao.service;

import com.zhentao.vo.ParamDefinitionVO;
import com.zhentao.vo.ParamValueVO;

import java.util.List;
import java.util.Map;

/**
 * 参数缓存服务接口
 * 
 * @author zhentao
 * @date 2024-12-19
 */
public interface ParamCacheService {

    /**
     * 缓存参数定义
     * @param paramKey 参数键
     * @param paramDefinition 参数定义
     */
    void cacheParamDefinition(String paramKey, ParamDefinitionVO paramDefinition);

    /**
     * 获取缓存的参数定义
     * @param paramKey 参数键
     * @return 参数定义
     */
    ParamDefinitionVO getCachedParamDefinition(String paramKey);

    /**
     * 缓存参数值
     * @param paramKey 参数键
     * @param environment 环境
     * @param paramValue 参数值
     */
    void cacheParamValue(String paramKey, String environment, ParamValueVO paramValue);

    /**
     * 获取缓存的参数值
     * @param paramKey 参数键
     * @param environment 环境
     * @return 参数值
     */
    ParamValueVO getCachedParamValue(String paramKey, String environment);

    /**
     * 批量缓存参数定义
     * @param paramDefinitions 参数定义映射
     */
    void batchCacheParamDefinitions(Map<String, ParamDefinitionVO> paramDefinitions);

    /**
     * 批量获取缓存的参数定义
     * @param paramKeys 参数键列表
     * @return 参数定义映射
     */
    Map<String, ParamDefinitionVO> getBatchCachedParamDefinitions(List<String> paramKeys);

    /**
     * 删除参数定义缓存
     * @param paramKey 参数键
     */
    void evictParamDefinition(String paramKey);

    /**
     * 删除参数值缓存
     * @param paramKey 参数键
     * @param environment 环境
     */
    void evictParamValue(String paramKey, String environment);

    /**
     * 删除参数的所有缓存（包括定义和值）
     * @param paramKey 参数键
     */
    void evictAllParamCache(String paramKey);

    /**
     * 清空所有参数缓存
     */
    void clearAllCache();

    /**
     * 预热缓存 - 加载热点参数
     */
    void warmUpCache();

    /**
     * 获取缓存统计信息
     * @return 缓存统计
     */
    Map<String, Object> getCacheStatistics();

    /**
     * 检查缓存健康状态
     * @return 健康状态
     */
    boolean isHealthy();
}
